package com.feng.thread;

public class ThreadLocalDemo1 {
	private static final ThreadLocal<Integer> tl = new ThreadLocal<Integer>() {
		@Override
		protected Integer initialValue() {// 初始化ThreadLocal，并赋值
			return 0;// 赋值为0
		}
	};

	static class MyThread implements Runnable {// 线程类
		private int index;

		public MyThread(int index) {
			this.index = index;
		}

		public void run() {
			System.out.println("线程" + index + "的初始value:" + tl.get());// get方法用来获取与当前线程关联的ThreadLocal的值
			for (int i = 0; i < 10; i++) {
				tl.set(tl.get() + i);// set方法赋值
			}
			System.out.println("线程" + index + "的累加value:" + tl.get());
		}
	}

	public static void main(String[] args) {
		for (int i = 0; i < 5; i++) {
			new Thread(new MyThread(i))// 循环创建线程并启动，供5个线程
					.start();
		}
	}
	/**
	 * 打印结果：可以看到， 各个线程的value值是相互独立的，本线程的累加操作不会影响到其他线程的值，真正达到了线程内部隔离的效果
	 * 线程0的初始value:0 线程4的初始value:0 线程2的初始value:0 线程3的初始value:0 线程1的初始value:0
	 * 线程3的累加value:45 线程2的累加value:45 线程4的累加value:45 线程0的累加value:45
	 * 线程1的累加value:45
	 * 
	 */
}
